liblfds release 4 release note
Release date : 7th December 2009
What's New?
- Added support for Linux on ARM. Requires ARMv6k or better.
- Fixed a profound, pervasive bug where pointer declerations incorrectly specified
volatility. x86/x64 appear unaffected, but on other platforms, only debug builds
have been reliable; release builds were subtly or not-so-subtly broken, depending
on platform. On some platforms (Linux on ARM) some test failed consistently. On
others (Linux on x86) test failures were so rare the tests seemed fine.
- Changed all state and element state pointer types from void pointer to a struct
pointer, e.g. void *stack_state to struct stack_state *ss. The various structures
are declared as incomplete types in abstraction.h, so you can use them but you
can't touch the members.
- Added FREELIST_QUERY_VALIDATE to freelist_query. This validates a freelist,
by checking the expected number of elements are present and there are no loops. This
is for the test program.
- Added QUEUE_QUERY_VALIDATE to queue_query. This validates a queue,
by checking the expected number of elements are present and there are no loops. This
is for the test program.
- Fixed a bug in queue_delete. When we came to delete the queue, we would
fully dequeue (which pushes all elements back onto the freelist) then delete
the freelist and delete the state. However, there is in the algorithm a
dummy element and fully dequeuing does not remove it from the queue. As such,
that element was manually pushed back onto the freelist. The bug was that
the queue_element was being pushed back, rather than the freelist_element which
held the queue_element. This bug also existed in the ringbuffer's queue and
likewise has been fixed there.
- Added tests for the liblfds abstraction layer.
- Converted the freelist and queue tests into pass/fail tests; the tests have been
fully rewritten and are much better.
- Added a benchmark functionality to the test program. Only one benchmark to begin
with, for the queue. Emits CSV data to stdout.
Known Issues
SList may be broken; on linux on x86, prior to the pointer fix, it asserted on a
NULL pointer in about 10% of tests. Going to investigate this now and see if it
still occurs.